import DebugExt from "./DebugExt";
import UILangData from "./UILangData";


export default class MutiLanguage {

    // 单例
    public static getIns(): MutiLanguage {
        if (!this._ins)
            this._ins = new MutiLanguage();
        return this._ins;
    }
    private static _ins: MutiLanguage = null;
    private constructor() { }


    /**
     * 初始化全局多语言对象
     * @param langList 指定使用的多语言列表（不设置则默认支持json文件中所有语言）
     * @param baseLang 备选语言（当找不到指定语言文本时，返回的备选语言选项）
     * @param jsonPath 多语言配置文件
     */
    public init(langList: string[] = [], baseLang: string = '', jsonPath?: string) {
        if (!this._langData) {
            this._langData = new UILangData(langList, baseLang);
            this.loadData("language/language");
        }
        if (!!jsonPath)
            this.loadData(jsonPath);
    }
    private loadData(jsonPath: string) {
        cc.loader.loadRes(jsonPath, cc.JsonAsset, (error: Error, resource: cc.JsonAsset) => {
            if (!!resource && !error) {
                this._langData.setJsonLangData(resource.json);
            }
            else {
                DebugExt.debug("全局多语言加载失败，路径：", jsonPath, "\n错误详情：", error);
            }
        });
    }
    private _langData: UILangData = null;

    /** 查询多语言字符串 */
    public getString(key: string, ...param: Array<string | number>): string {
        if (!this._langData) {
            DebugExt.warn("MutiLanguage需要主动调用init函数初始化！");
            return "";
        }
        return this._langData.getString(key, ...param);
    }

}